package main

import (
	"fmt"
	"time"
)

//go run -race xxx.go来查看程序的数据冲突
//goroutine是非抢占式多任务处理，需要协程主动交出控制权
func main() {
	//var a [10]int
	for i := 0; i < 1000; i++ {
		go func(i int) { // 如果不定义参数i,直接引用外面的数据（闭包），会导致race condition.数据访问冲突
			for {
				fmt.Printf("Hello from goroutine %d.\n", i)
				//a[i]++
				////a[i]++不会自己交出控制权，需要手动交出控制权,让其他协程有机会执行
				//runtime.Gosched()
			}
		}(i)
	}
	time.Sleep(time.Minute)
	//time.Sleep(time.Millisecond)
	//fmt.Println(a)
}
